package worker

import (
	"fmt"
	"log"
	"net/http"
	"sync"

	"go-gateworker/internal/config"
	"go-gateworker/internal/proxy"
)

// Worker 表示一个工作进程
type Worker struct {
	ID     int
	Port   int
	proxy  *proxy.Proxy
	config *config.Config
	server *http.Server
	stopCh chan struct{}
	wg     sync.WaitGroup
}

// NewWorker 创建新的工作进程
func NewWorker(id int, port int, cfg *config.Config) *Worker {
	return &Worker{
		ID:     id,
		Port:   port,
		config: cfg,
		stopCh: make(chan struct{}),
	}
}

// Start 启动工作进程
func (w *Worker) Start() error {
	// 初始化代理
	p := proxy.New(w.config)
	w.proxy = p

	// 创建HTTP服务器
	w.server = &http.Server{
		Addr:    fmt.Sprintf(":%d", w.Port),
		Handler: w.proxy,
	}

	// 启动服务器
	log.Printf("Worker %d starting on port %d", w.ID, w.Port)
	return w.server.ListenAndServe()
}

// Stop 停止工作进程
func (w *Worker) Stop() error {
	if w.server != nil {
		return w.server.Close()
	}
	return nil
}

// GetMetrics 获取工作进程指标
func (w *Worker) GetMetrics() interface{} {
	if w.proxy != nil {
		return w.proxy.GetMetrics()
	}
	return nil
}
